<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>Хранилище файлов</title>
<link href="ice.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<p><b>Distributed Network Messaging Protocol</b></p>
<p>Коммерческое использование только с разрешения автора.<br>
При использовании необходимо явно указывать ссылку на источник.</p>

<p>Sergey Bodrov, 2010-07-10</p>

<p><b>Хранилище файлов (Files Storage)</b></p>

<p>Сервис хранилища файлов позволяет клиентам размещать на узлах свои файлы для персонального и общего использования. При размешении персональных файлов их содержимое может быть зашифровано.</p>

<p>
Возможности сервиса:<br>
<li>получение списка файлов по поисковому запросу
<li>получение подробной информации по заданному файлу
<li>организация файлов в группы и категории
<li>размещение файла в хранилище
<li>получение файла из хранилища
<li>удаление файла из хранилища
<li>изменение информации о файле
<li>изменение содержимого файла
<li>подписка на получение новых и обновленных файлов по заданным условиям
</p>

<p>
Файлы на сервисе организованы в иерархические группы (каталоги), каждый файл 
имеет набор свойств:<br>
<b>name</b> - имя файла<br>
<b>size</b> - размер, байтов<br>
<b>date_create</b> - дата и время создания<br>
<b>date_modify</b> - дата и время последнего изменения<br>
<b>crc</b> - контрольная сумма<br>
<b>category</b> - категория<br>
<b>group</b> - группа<br>
<b>flags</b> - список имен флагов, означающих наличие у файла некоторых признаков<br>
<b>owners</b> - список владельцев<br>
<b>description</b> - описание<br>
</p>

<p>
Имя файла может содержать путь к файлу в иерархии групп, имена групп разделены 
бэкслешем (как в UNIX). 
Категория отражает тип содержимого файла.
Список владельцев содержит GUID владельцев файла. 
Флаги указывают на наличие у файла некоторых признаков:
pub - доступен для всех
pvt - доступен только владельцам
r-o - только-чтение, любые изменения заблокированы
enc - содержимое файла зашифровано
inv - невидимый, не попадает в списки файлов
</p>

<p>
Файл может передаваться целиком в одном сообщении, или сегментами. 
В случае передачи сегментами, первый сегмент содержит обычный заголовок 
файла, плюс размер одного сегмента и общее количество сегментов.
Последующие сегменты содержат только номер файла и номер сегмента. 
У каждого сегмента есть своя контрольная сумма.
</p>

<p>
Возможно изменение содержимого файла при помощи файла описания изменений 
(DIFF). Это позволяет вносить изменения в файлы, не передавая весь файл 
целиком. При этом размер и контрольная сумма изменяемого файла должны 
соответствовать описанию изменений.
</p>


<p><b>Формат сообщений DNMP</b></p>

<p>
<u>Обязаительные реквизиты для всех сообщений</u><br>
Тип: <b>FLST</b><br>
</p>

<p>
<u>Передаваемый файл или его первый сегмент</u><br>
Параметры:<br>
<b>name</b> - имя файла<br>
<b>size</b> - размер, байтов<br>
<b>date_create</b> - дата и время создания<br>
<b>date_modify</b> - дата и время последнего изменения<br>
<b>crc</b> - контрольная сумма файла<br>
<b>seg_crc</b> - контрольная сумма текущего сегмента<br>
Данные:<br>
Содержимое файла или его первого сегмента<br>
</p>

<p>
<u>Сегмент файла (кроме первого)</u><br>
Параметры:<br>
<b>name</b> - имя файла<br>
<b>seg_offset</b> - смещение сегмента от начала файла, байт<br>
<b>seg_crc</b> - контрольная сумма сегмента<br>
Данные:<br>
Содержимое файла или его первого сегмента<br>
</p>

<p>
<u>Команда сервису</u><br>
Параметры:<br>
<b>cmd</b> - команда<br>
Данные:<br>
параметры команды<br>
</p>

<p>
<u>Данные</u><br>
Параметры:<br>
<b>data</b> - тип данных<br>
Данные:<br>
содержимое данных<br>
</p>


<p><b>Команды:</b></p>
[S] - Cервис на узле<br>
[C] - Клиент<br>
[SС] - Сервис на узле и клиент<br>

<p>
<b>LIST &lt;тип списка&gt; [условия]</b><br>
[SС] Возвращает список требуемого типа сведений о файлах, с учетом условий<br>
</p>

<p>
<b>GET_FILE_INFO &lt;имя файла&gt;</b><br>
[SС] Возвращает подробную информацию о файле с указанным именем.
</p>

<p>
<b>SET_FILE_INFO &lt;имя файла&gt; &lt;свойство=значение&gt; [свойство=значение] .. </b><br>
[SС] Установка свойств файла с указанным именем. Возвращает сообщение об успехе операции или ошибке.
</p>

<p>
<b>GET_FILE &lt;имя файла&gt;</b><br>
[SС] Запуск отправки файла с указанным именем. Возвращает сообщение об ошибке, если файл недоступен.
</p>

<p>
<b>GET_PART &lt;имя файла&gt; &lt;смещение&gt; &lt;размер&gt;</b><br>
[SС] Запуск отправки части файла заданного размера, начиная с заданного смещения. Размер и смещение указаны в байтах.
</p>

<p>
<b>PUT_FILE &lt;имя файла&gt; &lt;размер&gt;</b><br>
[SС] Запрос на прием файла указанного размера. Возвращает результат запроса - готовность принять файл или описание причины неготовности.
</p>

<p>
<b>DEL_FILE &lt;имя файла&gt;</b><br>
[SС] Удаление файла с указанным именем.
</p>

<p>
<b>MOD_FILE &lt;имя файла&gt; &lt;контрольная сумма&gt;</b><br>
[SС] Запрос на прием модификаций файла с заданным именем и контрольной суммой. Возвращает результат запроса - готовность принять или описание причины неготовности.
</p>

<p>
<b>ADD_OWNER &lt;имя файла&gt; &lt;GUID владельца&gt;</b><br>
[SС] Довавить владельца с указанным GUID для файла с заданным именем.
</p>

<p>
<b>DEL_OWNER &lt;имя файла&gt; &lt;GUID владельца&gt;</b><br>
[SС] Удалить владельца с указанным GUID для файла с заданным именем.
</p>



</body>
</html>